import { defineStore } from "pinia"

/**
 * 1. 定义并导出容器
 * 参数1：容器ID，必须唯一，将来 Pinia 会把所有的容器挂载到根容器
 * 参数2：选项对象
 * 返回值：一个函数，调用得到容器实例
 */
export default defineStore('main', {
    /**
     * 类似于组件的 data，用来存储全局状态
     * 1. 必须是函数：这样是为了在服务器端渲染的时候避免交叉请求导致的数据状态污染
     * 2. 必须是箭头函数，是为了更好的 TS 类型推导
     * @returns 
     */
    state: () => ({
        count: 100,
        name: '孙小双'
    }),
    /**
     * 类似于组件的 computed，用来封装计算属性，又缓存的功能
     */
    getters: {},
    /**
     * 类似于组件的 methods，封装业务逻辑，修改 state
     */
    actions: {
        add() {
            this.count++
            this.name += '1'
        }
    }
})
